package tp.tecnicasdisenio.model.accion;

import tp.tecnicasdisenio.dao.AlumnoDaoInterface;
import tp.tecnicasdisenio.dao.ConsultaDaoInterface;
import tp.tecnicasdisenio.model.AccionInterface;
import tp.tecnicasdisenio.model.AutoRespondedorInterface;
import tp.tecnicasdisenio.model.MailInterface;
import tp.tecnicasdisenio.model.entity.Alumno;
import tp.tecnicasdisenio.model.entity.Consulta;
import tp.tecnicasdisenio.model.parser.ParserTituloConsultaTemaAbstract;

public abstract class AccionCrearConsultaAbstract implements AccionInterface {
	protected ConsultaDaoInterface consultaDao;
	protected AlumnoDaoInterface alumnoDao;
	protected Consulta consulta;
	protected ParserTituloConsultaTemaAbstract parserTitulo;
	
	public AccionCrearConsultaAbstract(){
		this.consulta = new Consulta();
	}
	
	public void setConsultaDao(ConsultaDaoInterface consultaDao){
		this.consultaDao  = consultaDao;
	}

	public void setAlumnoDao(AlumnoDaoInterface alumnoDao){
		this.alumnoDao  = alumnoDao;
	}
	
	public Consulta getConsulta(){
		return this.consulta;
	}
	
	protected abstract void construirConsulta(MailInterface mail);
	
	protected void insertarConsulta() {
		this.consultaDao.insertar(this.consulta);
	}
	
	protected String obtenerPadron(MailInterface mensaje){
		
		Alumno alumno = alumnoDao.getPorEmail(mensaje.getFrom());
		if (alumno != null){
			return alumno.getPadron();
		}else{
			return null;
		}
	}
	
	protected String extraerTema(MailInterface mail){
		this.parserTitulo.setMail(mail);
		return this.parserTitulo.getTema();
	}

	@Override
	public void aplicarSobre(MailInterface mensaje, AutoRespondedorInterface autoRespondedor) {
		// solo inserto la consulta si no hay una existente con ese tema
		if (this.consultaDao.getPorId(this.extraerTema(mensaje)) == null){
			System.out.println("no existe la consulta, se va a crear");
			this.construirConsulta(mensaje);
			this.insertarConsulta();
			System.out.println("Se ha creado la consulta: " + this.extraerTema(mensaje));
			autoRespondedor.responderA(mensaje, "Se ha creado correctamente la consulta con tema: " + this.extraerTema(mensaje));
		}else{
			System.out.println("no existe la consulta, se va a crear");
		}
	}

}
